package com.dxtx.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ScrollView;

public class ListenScrollView extends ScrollView {
	public ListenScrollView(Context context) {
		super(context);
	}

	public ListenScrollView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}

	public ListenScrollView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	@Override
	protected void onScrollChanged(int l, int t, int oldl, int oldt) {
		super.onScrollChanged(l, t, oldl, oldt);
		// 这里使用回调监听scrollView的滚动,当滚动时会调用.
		if (onScrollListener != null) {
			onScrollListener.onScroll(getScrollY());
		}
	}

	@Override
	public boolean dispatchTouchEvent(MotionEvent ev) {
		if (onTouchListener != null) {
			onTouchListener.onTouch(this, ev);
		}
		return super.dispatchTouchEvent(ev);
	}

	private OnTouchListener onTouchListener;
	private OnScrollListener onScrollListener;

	/**
	 * 
	 * @描述 设置监听事件的控制器,与普通onTouchListener的区别是,该方法设置的监听器,不会因为他的返回值而影响事件分发机制
	 *     <p>
	 *     普通的onTouchListener,他返回true时,就取代了其他事件,使得子控件以及自身滚动事件不再响应;
	 *     <p>
	 *     普通的onTouchListener,他返回false时,就只能接收到down事件,余下的事件因为false而接收不到了;
	 * @param l
	 * @作者 [pWX273343] 2015年12月25日
	 */
	public void setListenOnTouchListener(OnTouchListener l) {
		onTouchListener = l;
	}

	/**
	 * 
	 * @描述 滚动时的回调方法,这里获取scrollY,实时监听scrollview的滚动位置
	 * 
	 * @param l
	 * @作者 [pWX273343] 2015年12月25日
	 */
	public void setOnScrollListener(OnScrollListener l) {
		onScrollListener = l;
	}

	public interface OnScrollListener {
		void onScroll(int scrollY);
	}
}
